/*定义驱动*/

#include <linux/module.h>
#include <linux/init.h>
#include <linux/device.h>

#define ROOT "HaJdrv"
#define BRAN "2"
#define ROOT_BRAN ROOT BRAN

extern struct bus_type HaJbus;

// 定义驱动的 probe 函数
int HaJdrv_probe(struct device *dev)
{
	int ret = -ENODEV ;
	printk("%s %s dev.kobj.name=%s\n",__FILE__,__func__ , dev->kobj.name );
	if( dev->kobj.name[ strlen(dev->kobj.name)-1 ] == BRAN[0]  )
		ret = 0 ;
    printk("Driver probe function called ret=%d\n" , ret );
	//dump_stack() ;
	return ret;
}

// 定义驱动的 remove 函数
int HaJdrv_remove(struct device *dev)
{
	printk("%s %s\n",__FILE__,__func__);
    printk("Driver remove function called\n");
    return 0;
}

// 定义驱动对象
#if 10
struct device_driver HaJdrv = {
    .name = ROOT_BRAN , //"HaJdrv1",  // 驱动名
    .bus = &HaJbus,  // 关联总线
    .probe = HaJdrv_probe,  // 探测函数
    .remove = HaJdrv_remove,  // 移除函数
};
#endif 
#if 0
struct haj_device_id haj_id = {
	{"haj1",},
	{"haj2",},
	{},
} ;

struct hajbus_driver HaJdrv = {
	.driver = {
    	.name = "HaJdev",  // 驱动名
    	.bus = &HaJbus,  // 关联总线
    	.probe = HaJdrv_probe,  // 探测函数
    	.remove = HaJdrv_remove,  // 移除函数
	},
	.id_table = haj_id,	
};

#endif


// 模块加载函数：注册驱动
static int __init HaJdrv_init(void)
{
    int ret;
	printk("%s %s\n",__FILE__,__func__);
    ret = driver_register(&HaJdrv);
    if (ret < 0)
    {
        printk("driver_register error\n");
        return ret;
    }
    return 0;
}

// 模块卸载函数：注销驱动
static void __exit HaJdrv_exit(void)
{
	printk("%s %s\n",__FILE__,__func__);
    driver_unregister(&HaJdrv);
}

module_init(HaJdrv_init);
module_exit(HaJdrv_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple Linux driver example");


